use alloc::sync::Arc;

use crate::sched::{
    schedule::{SchedClass, SchedClassFlags},
    task::Task,
};

pub(super) struct IdleSchedClass;

impl SchedClass for IdleSchedClass {
    fn check_preempt_curr(&self, _rq: &super::Rq, _tsk: Arc<Task>, _flags: SchedClassFlags) {}

    fn dequeue_task(&self, _rq: &super::Rq, _tsk: Arc<Task>, _flags: SchedClassFlags) {}

    fn enqueue_task(&self, _rq: &super::Rq, _tsk: Arc<Task>, _flags: SchedClassFlags) {}

    fn pick_next_task(&self, _rq: &super::Rq, _prev_tsk: &Task) -> Option<Arc<Task>> {
        None
    }

    fn put_prev_task(&self, _rq: &super::Rq, _prev_tsk: Arc<Task>) {}

    fn set_curr_task(&self, _rq: &super::Rq, _next_tsk: Arc<Task>) {}

    fn task_tick(&self, _rq: &super::Rq) {}

    fn update_curr(&self, _rq: &super::Rq) {}

    fn yield_task(&self, _rq: &super::Rq) {}
}

pub(super) static IDLE_SCHED_CLASS: IdleSchedClass = IdleSchedClass;
